home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / source / term43-source.lha / Extras / Source / term-Source.lha / SerialPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-02-18  |  15.4 KB  |  679 lines

  1. /*
  2. **    SerialPanel.c
  3. **
  4. **    Editing panel for serial configuration
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_BAUD=1000,GAD_DATABITS,GAD_PARITY,GAD_STOPBITS,GAD_HANDSHAKING,GAD_DUPLEX,GAD_BUFFERSIZE,GAD_BREAKLENGTH,
  13.         GAD_STRIP,GAD_HIGHSPEED,GAD_CHECK_CARRIER,GAD_SHARED,GAD_XON_XOFF,GAD_PASSTHROUGH,
  14.         GAD_DEVICE,GAD_SELECT,GAD_UNIT,GAD_QUANTUM,GAD_USE_OWNDEVUNIT,
  15.         GAD_SATISFY_ODU,GAD_USE,GAD_CANCEL,GAD_DEFAULT,
  16.         GAD_PAGER,GAD_PAGEGROUP
  17.     };
  18.  
  19. STATIC LONG Sizes[] =
  20. {
  21.     16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288
  22. };
  23.  
  24. STATIC LONG __saveds
  25. ShowBaud(struct Gadget *SomeGadget,WORD Level)
  26. {
  27.     return(BaudRates[Level]);
  28. }
  29.  
  30. STATIC LONG __saveds
  31. ShowSize(struct Gadget *SomeGadget,WORD Level)
  32. {
  33.     return(Sizes[Level]);
  34. }
  35.  
  36. STATIC LONG __saveds __asm
  37. RateHookFunc(register __a2 LONG Current,register __a1 LONG Command)
  38. {
  39.     LONG Index;
  40.  
  41.     if(Current < BaudRates[0])
  42.         Current = BaudRates[Index = 0];
  43.     else
  44.     {
  45.         if(Current > BaudRates[NumBaudRates - 1])
  46.             Current = BaudRates[Index = NumBaudRates - 1];
  47.         else
  48.         {
  49.             LONG i;
  50.  
  51.             Index = -1;
  52.  
  53.             for(i = 0 ; i < NumBaudRates ; i++)
  54.             {
  55.                 if(Current == BaudRates[i])
  56.                 {
  57.                     switch(Command)
  58.                     {
  59.                         case INCREMENTERMSG_DECREMENT:
  60.  
  61.                             if(i > 0)
  62.                                 return(BaudRates[i - 1]);
  63.                             else
  64.                                 return(Current);
  65.  
  66.                         case INCREMENTERMSG_INCREMENT:
  67.  
  68.                             if(i < NumBaudRates - 1)
  69.                                 return(BaudRates[i + 1]);
  70.                             else
  71.                                 return(Current);
  72.  
  73.                         default:
  74.  
  75.                             return(Current);
  76.                     }
  77.                 }
  78.             }
  79.  
  80.             if(Index == -1)
  81.             {
  82.                 if(Command == INCREMENTERMSG_DECREMENT)
  83.                 {
  84.                     for(i = 0 ; i < NumBaudRates ; i++)
  85.                     {
  86.                         if(BaudRates[i] <= Current)
  87.                             Index = i;
  88.                     }
  89.  
  90.                     if(BaudRates[Index] < Current || !Index)
  91.                         return(BaudRates[Index]);
  92.                     else
  93.                         return(BaudRates[Index - 1]);
  94.                 }
  95.                 else
  96.                 {
  97.                     for(i = NumBaudRates - 1 ; i >= 0 ; i--)
  98.                     {
  99.                         if(BaudRates[i] >= Current)
  100.                             Index = i;
  101.                     }
  102.  
  103.                     if(Command == INCREMENTERMSG_INITIAL)
  104.                     {
  105.                         if(Index == -1)
  106.                             return(Current);
  107.                         else
  108.                             return(BaudRates[Index]);
  109.                     }
  110.                     else
  111.                     {
  112.                         if(BaudRates[Index] > Current || Index == NumBaudRates - 1)
  113.                             return(BaudRates[Index]);
  114.                         else
  115.                             return(BaudRates[Index + 1]);
  116.                     }
  117.                 }
  118.             }
  119.         }
  120.     }
  121.  
  122.     if(Index == -1 || (Command != INCREMENTERMSG_DECREMENT && Command != INCREMENTERMSG_INCREMENT))
  123.         return(Current);
  124.     else
  125.     {
  126.         if(Command == INCREMENTERMSG_DECREMENT)
  127.         {
  128.             if(Index > 0)
  129.                 return(BaudRates[Index - 1]);
  130.             else
  131.                 return(BaudRates[Index]);
  132.         }
  133.         else
  134.         {
  135.             if(Index < NumBaudRates - 1)
  136.                 return(BaudRates[Index + 1]);
  137.             else
  138.                 return(BaudRates[Index]);
  139.         }
  140.     }
  141. }
  142.  
  143. BYTE __regargs
  144. SerialPanel(struct Configuration *LocalConfig,BYTE *Default)
  145. {
  146.     STATIC struct Hook IncrementerHook =
  147.     {
  148.         {NULL},
  149.         (HOOKFUNC)RateHookFunc
  150.     };
  151.  
  152.     STATIC LONG PageTitleID[5] =
  153.     {
  154.         MSG_V36_0171,
  155.         MSG_V36_0176,
  156.         MSG_ODU_SUPPORT_TXT,
  157.         MSG_V36_0179,
  158.         -1
  159.     };
  160.  
  161.     STATIC BYTE         InitialPage = 0;
  162.  
  163.     struct LayoutHandle    *Handle;
  164.     BYTE             Cancel = FALSE;
  165.     STRPTR             PageTitle[5];
  166.  
  167.     LocalizeStringTable(PageTitle,PageTitleID);
  168.  
  169.     SaveConfig(LocalConfig,PrivateConfig);
  170.  
  171.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  172.         LH_LocaleHook,    &LocaleHook,
  173.         LH_ExitFlush,    FALSE,
  174.     TAG_DONE))
  175.     {
  176.         struct Window    *PanelWindow;
  177.         LONG         Rate,Size,Quantum,Bits,StopBits,i;
  178.  
  179.         for(i = 0 ; i < NumBaudRates ; i++)
  180.         {
  181.             if(LocalConfig -> SerialConfig -> BaudRate == BaudRates[i])
  182.             {
  183.                 Rate = i;
  184.  
  185.                 break;
  186.             }
  187.         }
  188.  
  189.         for(i = 4 ; i < sizeof(Sizes) / sizeof(LONG) ; i++)
  190.         {
  191.             if(LocalConfig -> SerialConfig -> SerialBufferSize == Sizes[i])
  192.             {
  193.                 Size = i;
  194.  
  195.                 break;
  196.             }
  197.         }
  198.  
  199.         for(i = 0 ; i < sizeof(Sizes) / sizeof(LONG) ; i++)
  200.         {
  201.             if(LocalConfig -> SerialConfig -> Quantum == Sizes[i])
  202.             {
  203.                 Quantum = i;
  204.  
  205.                 break;
  206.             }
  207.         }
  208.  
  209.         if(LocalConfig -> SerialConfig -> HighSpeed)
  210.         {
  211.             LocalConfig -> SerialConfig -> BitsPerChar    = 8;
  212.             LocalConfig -> SerialConfig -> StopBits    = 1;
  213.             LocalConfig -> SerialConfig -> Parity    = PARITY_NONE;
  214.         }
  215.  
  216.         LT_New(Handle,
  217.             LA_Type,    VERTICAL_KIND,
  218.         TAG_DONE);
  219.         {
  220.             LT_New(Handle,
  221.                 LA_Type,VERTICAL_KIND,
  222.             TAG_DONE);
  223.             {
  224.                 LT_New(Handle,
  225.                     LA_Type,    CYCLE_KIND,
  226.                     LA_ID,        GAD_PAGER,
  227.                     LA_LabelID,    MSG_XFER_PAGE_TXT,
  228.                     GTCY_Labels,    PageTitle,
  229.                     LACY_AutoPageID,GAD_PAGEGROUP,
  230.                     LACY_TabKey,    TRUE,
  231.                     LA_BYTE,    &InitialPage,
  232.                 TAG_DONE);
  233.  
  234.                 LT_EndGroup(Handle);
  235.             }
  236.  
  237.             LT_New(Handle,
  238.                 LA_Type,    VERTICAL_KIND,
  239.                 LA_ID,        GAD_PAGEGROUP,
  240.                 LAGR_Frame,    TRUE,
  241.                 LAGR_ActivePage,InitialPage,
  242.             TAG_DONE);
  243.             {
  244.                 LT_New(Handle,
  245.                     LA_Type,    VERTICAL_KIND,
  246.                 TAG_DONE);
  247.                 {
  248.                     LT_New(Handle,
  249.                         LA_Type,        INTEGER_KIND,
  250.                         LA_LabelID,        MSG_SERIALPANEL_BAUD_RATE_GAD,
  251.                         LA_LONG,        &LocalConfig -> SerialConfig -> BaudRate,
  252.                         LA_ID,            GAD_BAUD,
  253.                         GTIN_MaxChars,        8,
  254.                         LAIN_Min,        0,
  255.                         LAIN_UseIncrementers,    TRUE,
  256.                         LAIN_IncrementerHook,    &IncrementerHook,
  257.                     TAG_DONE);
  258.  
  259.                     Bits = LocalConfig -> SerialConfig -> BitsPerChar - 7;
  260.  
  261.                     LT_New(Handle,
  262.                         LA_Type,        CYCLE_KIND,
  263.                         LA_ID,            GAD_DATABITS,
  264.                         LA_LabelID,        MSG_SERIALPANEL_BITS_PER_CHAR_GAD,
  265.                         LA_LONG,        &Bits,
  266.                         GA_Disabled,        LocalConfig -> SerialConfig -> HighSpeed,
  267.                         LACY_FirstLabel,    MSG_SERIALPANEL_SEVEN_BITS_TXT,
  268.                         LACY_LastLabel,        MSG_SERIALPANEL_EIGHT_BITS_TXT,
  269.                     TAG_DONE);
  270.  
  271.                     LT_New(Handle,
  272.                         LA_Type,        CYCLE_KIND,
  273.                         LA_ID,            GAD_PARITY,
  274.                         LA_LabelID,        MSG_SERIALPANEL_PARITY_GAD,
  275.                         LA_BYTE,        &LocalConfig -> SerialConfig -> Parity,
  276.                         GA_Disabled,        LocalConfig -> SerialConfig -> HighSpeed,
  277.                         LACY_FirstLabel,    MSG_SERIALPANEL_NO_PARITY_TXT,
  278.                         LACY_LastLabel,        MSG_SERIALPANEL_SPACE_TXT,
  279.                     TAG_DONE);
  280.  
  281.                     StopBits = LocalConfig -> SerialConfig -> StopBits - 1;
  282.  
  283.                     LT_New(Handle,
  284.                         LA_Type,        CYCLE_KIND,
  285.                         LA_ID,            GAD_STOPBITS,
  286.                         LA_LabelID,        MSG_SERIALPANEL_STOP_BITS_GAD,
  287.                         LA_LONG,        &StopBits,
  288.                         GA_Disabled,        LocalConfig -> SerialConfig -> HighSpeed,
  289.                         LACY_FirstLabel,    MSG_SERIALPANEL_ONE_BIT_TXT,
  290.                         LACY_LastLabel,        MSG_SERIALPANEL_TWO_BITS_TXT,
  291.                     TAG_DONE);
  292.  
  293.                     LT_New(Handle,
  294.                         LA_Type,        CYCLE_KIND,
  295.                         LA_LabelID,        MSG_SERIALPANEL_HANDSHAKING_GAD,
  296.                         LA_BYTE,        &LocalConfig -> SerialConfig -> HandshakingProtocol,
  297.                         LACY_FirstLabel,    MSG_SERIALPANEL_HANDSHAKING_NONE_TXT,
  298.                         LACY_LastLabel,        MSG_SERIALPANEL_HANDSHAKING_RTS_CTS_DSR_TXT,
  299.                     TAG_DONE);
  300.  
  301.                     LT_New(Handle,
  302.                         LA_Type,        CYCLE_KIND,
  303.                         LA_LabelID,        MSG_SERIALPANEL_DUPLEX_GAD,
  304.                         LA_BYTE,        &LocalConfig -> SerialConfig -> Duplex,
  305.                         LACY_FirstLabel,    MSG_SERIALPANEL_DUPLEX_FULL_TXT,
  306.                         LACY_LastLabel,        MSG_SERIALPANEL_DUPLEX_HALF_TXT,
  307.                     TAG_DONE);
  308.  
  309.                     LT_New(Handle,
  310.                         LA_Type,        SliderType,
  311.                         LA_LabelID,        MSG_SERIALPANEL_BUFFER_SIZE_GAD,
  312.                         LA_LONG,        &Size,
  313.                         GTSL_Min,        4,
  314.                         GTSL_Max,        (sizeof(Sizes) / sizeof(LONG)) - 1,
  315.                         GTSL_DispFunc,        ShowSize,
  316.                         GTSL_LevelFormat,    LocaleBase ? "%7lD" : "%7ld",
  317.                     TAG_DONE);
  318.  
  319.                     LT_New(Handle,
  320.                         LA_Type,        INTEGER_KIND,
  321.                         LA_LabelID,        MSG_SERIALPANEL_BREAK_LENGTH_GAD,
  322.                         LA_LONG,        &LocalConfig -> SerialConfig -> BreakLength,
  323.                         GTIN_MaxChars,        8,
  324.                     TAG_DONE);
  325.  
  326.                     LT_EndGroup(Handle);
  327.                 }
  328.  
  329.                 LT_New(Handle,
  330.                     LA_Type,    VERTICAL_KIND,
  331.                 TAG_DONE);
  332.                 {
  333.                     LT_New(Handle,
  334.                         LA_Type,        CHECKBOX_KIND,
  335.                         LA_LabelID,        MSG_SERIALPANEL_STRIP_BIT_8_GAD,
  336.                         LA_BYTE,        &LocalConfig -> SerialConfig -> StripBit8,
  337.                     TAG_DONE);
  338.  
  339.                     LT_New(Handle,
  340.                         LA_Type,        CHECKBOX_KIND,
  341.                         LA_LabelID,        MSG_SERIALPANEL_SHARED_ACCESS_GAD,
  342.                         LA_BYTE,        &LocalConfig -> SerialConfig -> Shared,
  343.                     TAG_DONE);
  344.  
  345.                     LT_New(Handle,
  346.                         LA_Type,        CHECKBOX_KIND,
  347.                         LA_LabelID,        MSG_SERIALPANEL_XON_XOFF_GAD,
  348.                         LA_BYTE,        &LocalConfig -> SerialConfig -> xONxOFF,
  349.                     TAG_DONE);
  350.  
  351.                     LT_New(Handle,
  352.                         LA_Type,        CHECKBOX_KIND,
  353.                         LA_LabelID,        MSG_SERIALPANEL_PASS_XON_XOFF_THROUGH_GAD,
  354.                         LA_BYTE,        &LocalConfig -> SerialConfig -> PassThrough,
  355.                     TAG_DONE);
  356.  
  357.                     LT_New(Handle,
  358.                         LA_Type,        CHECKBOX_KIND,
  359.                         LA_LabelID,        MSG_SERIALPANEL_CHECK_CARRIER_GAD,
  360.                         LA_BYTE,        &LocalConfig -> SerialConfig -> CheckCarrier,
  361.                     TAG_DONE);
  362.  
  363.                     LT_New(Handle,
  364.                         LA_Type,        CHECKBOX_KIND,
  365.                         LA_LabelID,        MSG_SERIALPANEL_HIGH_SPEED_MODE_GAD,
  366.                         LA_BYTE,        &LocalConfig -> SerialConfig -> HighSpeed,
  367.                         LA_ID,            GAD_HIGHSPEED,
  368.                     TAG_DONE);
  369.  
  370.                     LT_New(Handle,
  371.                         LA_Type,        SliderType,
  372.                         LA_LabelID,        MSG_SERIALPANEL_QUANTUM_GAD,
  373.                         LA_LONG,        &Quantum,
  374.                         LA_Chars,        6,
  375.                         GTSL_Min,        0,
  376.                         GTSL_Max,        (sizeof(Sizes) / sizeof(LONG)) - 1,
  377.                         GTSL_Level,        Quantum,
  378.                         GTSL_DispFunc,        ShowSize,
  379.                         GTSL_LevelFormat,    LocaleBase ? "%7lD" : "%7ld",
  380.                     TAG_DONE);
  381.  
  382.                     LT_EndGroup(Handle);
  383.                 }
  384.  
  385.                 LT_New(Handle,
  386.                     LA_Type,    VERTICAL_KIND,
  387.                 TAG_DONE);
  388.                 {
  389.                     LT_New(Handle,
  390.                         LA_Type,    VERTICAL_KIND,
  391.                     TAG_DONE);
  392.                     {
  393.                         LT_New(Handle,
  394.                             LA_Type,        CHECKBOX_KIND,
  395.                             LA_LabelID,        MSG_SERIALPANEL_USE_OWNDEVUNIT_TXT,
  396.                             LA_BYTE,        &LocalConfig -> SerialConfig -> UseOwnDevUnit,
  397.                             LA_ID,            GAD_USE_OWNDEVUNIT,
  398.                         TAG_DONE);
  399.  
  400.                         LT_EndGroup(Handle);
  401.                     }
  402.  
  403.                     LT_New(Handle,
  404.                         LA_Type,    VERTICAL_KIND,
  405.                     TAG_DONE);
  406.                     {
  407.                         LT_New(Handle,
  408.                             LA_Type,        CYCLE_KIND,
  409.                             LA_LabelID,        MSG_SATISFY_ODU_TXT,
  410.                             LA_BYTE,        &LocalConfig -> SerialConfig -> SatisfyODURequests,
  411.                             LA_ID,            GAD_SATISFY_ODU,
  412.                             LACY_FirstLabel,    MSG_SATISFY_ODU_MODE1_TXT,
  413.                             LACY_LastLabel,        MSG_SATISFY_ODU_MODE3_TXT,
  414.                             GA_Disabled,        !LocalConfig -> SerialConfig -> UseOwnDevUnit,
  415.                         TAG_DONE);
  416.  
  417.                         LT_EndGroup(Handle);
  418.                     }
  419.  
  420.                     LT_EndGroup(Handle);
  421.                 }
  422.  
  423.                 LT_New(Handle,
  424.                     LA_Type,    VERTICAL_KIND,
  425.                 TAG_DONE);
  426.                 {
  427.                     LT_New(Handle,
  428.                         LA_Type,        STRING_KIND,
  429.                         LA_LabelID,        MSG_SERIALPANEL_SERIAL_DEVICE_GAD,
  430.                         LA_Chars,        20,
  431.                         LA_STRPTR,        LocalConfig -> SerialConfig -> SerialDevice,
  432.                         GTST_MaxChars,        255,
  433.                         LAST_Picker,        TRUE,
  434.                         LA_ID,            GAD_DEVICE,
  435.                     TAG_DONE);
  436.  
  437.                     LT_New(Handle,
  438.                         LA_Type,        INTEGER_KIND,
  439.                         LA_LabelID,        MSG_SERIALPANEL_DEVICE_UNIT_NUMBER_GAD,
  440.                         LA_LONG,        &LocalConfig -> SerialConfig -> UnitNumber,
  441.                         LA_ID,            GAD_UNIT,
  442.                         LAIN_UseIncrementers,    TRUE,
  443.                         GTIN_MaxChars,        8,
  444.                     TAG_DONE);
  445.  
  446.                     LT_EndGroup(Handle);
  447.                 }
  448.  
  449.                 LT_EndGroup(Handle);
  450.             }
  451.  
  452.             LT_New(Handle,
  453.                 LA_Type,VERTICAL_KIND,
  454.             TAG_DONE);
  455.             {
  456.                 LT_New(Handle,
  457.                     LA_Type,    XBAR_KIND,
  458.                     LAXB_FullSize,    TRUE,
  459.                 TAG_DONE);
  460.  
  461.                 LT_EndGroup(Handle);
  462.             }
  463.  
  464.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  465.                 LAGR_SameSize,    TRUE,
  466.                 LAGR_Spread,    TRUE,
  467.             TAG_DONE);
  468.             {
  469.                 LT_New(Handle,
  470.                     LA_Type,    BUTTON_KIND,
  471.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  472.                     LA_ID,        GAD_USE,
  473.                     LABT_ReturnKey,    TRUE,
  474.                     LABT_ExtraFat,    TRUE,
  475.                 TAG_DONE);
  476.  
  477.                 if(Default)
  478.                 {
  479.                     LT_New(Handle,
  480.                         LA_Type,    BUTTON_KIND,
  481.                         LA_LabelID,    MSG_GLOBAL_DEFAULT_GAD,
  482.                         LA_ID,        GAD_DEFAULT,
  483.                         LABT_ExtraFat,    TRUE,
  484.                     TAG_DONE);
  485.                 }
  486.  
  487.                 LT_New(Handle,
  488.                     LA_Type,    BUTTON_KIND,
  489.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  490.                     LA_ID,        GAD_CANCEL,
  491.                     LABT_EscKey,    TRUE,
  492.                     LABT_ExtraFat,    TRUE,
  493.                 TAG_DONE);
  494.  
  495.                 LT_EndGroup(Handle);
  496.             }
  497.  
  498.             LT_EndGroup(Handle);
  499.         }
  500.  
  501.         if(PanelWindow = LT_Layout(Handle,LocaleString(MSG_SERIALPANEL_SERIAL_PREFERENCES_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  502.             LAWN_HelpHook,        &GuideHook,
  503.             LAWN_Parent,        Window,
  504.             WA_DepthGadget,        TRUE,
  505.             WA_CloseGadget,        TRUE,
  506.             WA_DragBar,        TRUE,
  507.             WA_RMBTrap,        TRUE,
  508.             WA_Activate,        TRUE,
  509.         TAG_DONE))
  510.         {
  511.             UBYTE             DummyBuffer[MAX_FILENAME_LENGTH];
  512.             struct IntuiMessage    *Message;
  513.             BOOLEAN             Done = FALSE;
  514.             ULONG             MsgClass,
  515.                          MsgQualifier;
  516.             UWORD             MsgCode;
  517.             struct Gadget        *MsgGadget;
  518.  
  519.             GuideContext(CONTEXT_SERIAL);
  520.  
  521.             PushWindow(PanelWindow);
  522.  
  523.             LT_ShowWindow(Handle,TRUE);
  524.  
  525.             do
  526.             {
  527.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  528.                 {
  529.                     SaveConfig(PrivateConfig,LocalConfig);
  530.  
  531.                     break;
  532.                 }
  533.  
  534.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort))
  535.                 {
  536.                     MsgClass    = Message -> Class;
  537.                     MsgQualifier    = Message -> Qualifier;
  538.                     MsgCode        = Message -> Code;
  539.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  540.  
  541.                     GT_ReplyIMsg(Message);
  542.  
  543.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  544.  
  545.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  546.                     {
  547.                         SaveConfig(PrivateConfig,LocalConfig);
  548.  
  549.                         Done = TRUE;
  550.                     }
  551.  
  552.                     if(MsgClass == IDCMP_GADGETUP)
  553.                     {
  554.                         switch(MsgGadget -> GadgetID)
  555.                         {
  556.                             case GAD_USE_OWNDEVUNIT:
  557.  
  558.                                 LT_SetAttributes(Handle,GAD_SATISFY_ODU,
  559.                                     GA_Disabled,!MsgCode,
  560.                                 TAG_DONE);
  561.  
  562.                                 break;
  563.  
  564.                             case GAD_HIGHSPEED:
  565.  
  566.                                 if(MsgCode)
  567.                                 {
  568.                                     LT_SetAttributes(Handle,GAD_PARITY,
  569.                                         GA_Disabled,    TRUE,
  570.                                         GTCY_Active,    PARITY_NONE,
  571.                                     TAG_DONE);
  572.  
  573.                                     LT_SetAttributes(Handle,GAD_STOPBITS,
  574.                                         GA_Disabled,    TRUE,
  575.                                         GTCY_Active,    0,
  576.                                     TAG_DONE);
  577.  
  578.                                     LT_SetAttributes(Handle,GAD_DATABITS,
  579.                                         GA_Disabled,    TRUE,
  580.                                         GTCY_Active,    1,
  581.                                     TAG_DONE);
  582.                                 }
  583.                                 else
  584.                                 {
  585.                                     LT_SetAttributes(Handle,GAD_PARITY,
  586.                                         GA_Disabled,    FALSE,
  587.                                     TAG_DONE);
  588.  
  589.                                     LT_SetAttributes(Handle,GAD_STOPBITS,
  590.                                         GA_Disabled,    FALSE,
  591.                                     TAG_DONE);
  592.  
  593.                                     LT_SetAttributes(Handle,GAD_DATABITS,
  594.                                         GA_Disabled,    FALSE,
  595.                                     TAG_DONE);
  596.                                 }
  597.  
  598.                                 break;
  599.  
  600.                             case GAD_USE:
  601.  
  602.                                 LT_UpdateStrings(Handle);
  603.  
  604. /*                                LocalConfig -> SerialConfig -> BaudRate = BaudRates[Rate];*/
  605.                                 LocalConfig -> SerialConfig -> SerialBufferSize = Sizes[Size];
  606.                                 LocalConfig -> SerialConfig -> Quantum = Sizes[Quantum];
  607.                                 LocalConfig -> SerialConfig -> BitsPerChar = Bits + 7;
  608.                                 LocalConfig -> SerialConfig -> StopBits = StopBits + 1;
  609.  
  610.                                 Done = TRUE;
  611.                                 break;
  612.  
  613.                             case GAD_CANCEL:
  614.  
  615.                                 SaveConfig(PrivateConfig,LocalConfig);
  616.  
  617.                                 Cancel = Done = TRUE;
  618.                                 break;
  619.  
  620.                             case GAD_DEFAULT:
  621.  
  622.                                 *Default = TRUE;
  623.  
  624.                                 Done = TRUE;
  625.                                 break;
  626.  
  627.                             case GAD_DEVICE:
  628.  
  629.                                 FindLibDev(PanelWindow,LT_GetString(Handle,MsgGadget -> GadgetID),NT_DEVICE,NULL);
  630.                                 break;
  631.                         }
  632.                     }
  633.  
  634.                     if(MsgClass == IDCMP_IDCMPUPDATE && MsgGadget -> GadgetID == GAD_DEVICE)
  635.                     {
  636.                         LT_LockWindow(PanelWindow);
  637.  
  638.                         strcpy(DummyBuffer,(STRPTR)LT_GetAttributes(Handle,GAD_DEVICE));
  639.                         strcpy(SharedBuffer,DummyBuffer);
  640.  
  641.                         if(PickFile(PanelWindow,"Devs:","#?.device",LocaleString(MSG_SERIALPANEL_SELECT_DEVICE_TXT),SharedBuffer,NT_DEVICE))
  642.                         {
  643.                             if(Stricmp(DummyBuffer,SharedBuffer))
  644.                             {
  645.                                 FindLibDev(PanelWindow,DummyBuffer,NT_DEVICE,NULL);
  646.  
  647.                                 LT_SetAttributes(Handle,GAD_DEVICE,GTST_String,SharedBuffer,TAG_DONE);
  648.                             }
  649.                         }
  650.  
  651.                         LT_UnlockWindow(PanelWindow);
  652.  
  653.                         LT_ShowWindow(Handle,TRUE);
  654.                     }
  655.                 }
  656.             }
  657.             while(!Done);
  658.  
  659.             PopWindow();
  660.         }
  661.  
  662.         LT_DeleteHandle(Handle);
  663.     }
  664.  
  665.     if(Config -> MiscConfig -> ProtectiveMode && !Cancel)
  666.     {
  667.         if(LocalConfig -> SerialConfig -> BaudRate >= 4800 && LocalConfig -> SerialConfig -> HandshakingProtocol == HANDSHAKING_NONE)
  668.         {
  669.             if(MyEasyRequest(Window,LocaleString(MSG_NO_RTSCTS_TXT),LocaleString(MSG_GLOBAL_YES_NO_TXT),LocalConfig -> SerialConfig -> BaudRate))
  670.                 LocalConfig -> SerialConfig -> HandshakingProtocol = HANDSHAKING_RTSCTS_DSR;
  671.         }
  672.     }
  673.  
  674.     if(Default)
  675.         return((BYTE)(!Cancel));
  676.     else
  677.         return((BYTE)memcmp(PrivateConfig -> SerialConfig,LocalConfig -> SerialConfig,sizeof(struct SerialSettings)));
  678. }
  679.